package com.lemon.cloud.lock.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author lemon
 * @return
 * @description 锁的注解
 * @date 2019-09-05 12:45
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface CacheLock {
    /**
     * @param
     * @return java.lang.String 锁key的前缀
     * @description 锁key的前缀
     * @author lemon
     * @date 2019-09-05 12:45
     */
    String prefix() default "";

    /**
     * @return int
     * @description 重试次数
     * @author lemon
     * @date 2019-09-05 13:04
     */
    int retryTimes() default 3;

    /**
     * @param
     * @return long
     * @description 每次重试后等待的时间
     * @author lemon
     * @date 2019-09-05 13:05
     */
    long sleepMillis() default 2;

    /**
     * @param
     * @return int 默认为5秒
     * @description 过期秒数，默认为5秒
     * @author lemon
     * @date 2019-09-05 12:45
     */
    int expire() default 5;

    /**
     * @param
     * @return java.util.concurrent.TimeUnit 超时时间单位，默认秒
     * @description 超时时间单位，默认秒
     * @author lemon
     * @date 2019-09-05 12:46
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * @param
     * @return java.lang.String Key的分隔符（默认 :）
     * @description Key的分隔符（默认 :），N:SO1008:500
     * @author lemon
     * @date 2019-09-05 12:46
     */
    String delimiter() default ":";
}